查看原文
其他

坐标转换源码分享,你能看懂吗?


大地坐标转换为直角坐标

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 大地坐标转换为直角坐标{ //参心大地坐标转换为参心直角坐标(BLH-->XYZ) class Program { static void Main(string[] args){ //初始化变量 double B, L, H, X, Y, Z; B = Convert.ToDouble(Console.ReadLine()); L = Convert.ToDouble(Console.ReadLine()); H = Convert.ToDouble(Console.ReadLine()); //转化 BLH2XYZ(B, L, H, out X, out Y, out Z); //输出计算结果 Console.WriteLine("X={0,12:F3},Y={1,12:F3},Z={0,12:F3}", X, Y, Z); Console.ReadKey(); } /// <summary> /// 参心大地坐标转换为参心空间直角坐标系(BLH-->XYZ) /// </summary> /// <param name="B">纬度(以度为单位)</param> /// <param name="L">经度(以度为单位)</param> /// <param name="H">大地高(以米为单位)</param> /// <param name="X">X分量(以米为单位)</param> /// <param name="Y">X分量(以米为单位)</param> /// <param name="Z">X分量(以米为单位)</param> private static void BLH2XYZ(double B, double L, double H, out double X, out double Y, out double Z){ //将角度转换为弧度 double deg2rad = Math.PI / 180; B = B * deg2rad; L = L * deg2rad; //计算相关参数 double e2 = GetE2(); double N = GetN(B); //转化计算 X = (N + H) * Math.Cos(B) * Math.Cos(L); Y = (N + H) * Math.Cos(B) * Math.Sin(L); Z = (N * (1 - e2) + H) * Math.Sin(B); } /// <summary> /// 计算第一偏心率的平方 /// </summary> /// <returns>第一偏心率的平方</returns> private static double GetE2(){ double a = 6378137; double f = 1 / 298.257222101; double e2 = 2 * f - f * f; return e2; } /// <summary> /// 计算卯酉圈曲率半径 /// </summary> /// <param name="B">纬度(以弧度为单位)</param> /// <returns>椭球面卯酉圈的曲率半径</returns> private static double GetN(double B){ double e2 = GetE2(); double a = 6378137; double sinB = Math.Sin(B); double N = a / Math.Sqrt(1 - e2 * sinB * sinB); return N; } }}

来源:测绘程序设计 转自:GeomaticsCente



END



坐标转换 | 坐标系相关知识科普、四/七参数计算方法及“傻瓜式”转换流程!
一款最好用的坐标转换小工具,附下载!坐标转换计算方法(真的没几个人懂得了)利用CORS求解CGCS2000与独立坐标转换参数的方法及过程
坐标转换与参数计算介绍,测绘人必备知识点!

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存